맨위로가기

C 표준 라이브러리

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
목차

1. 개요

C 표준 라이브러리는 C 언어에서 사용되는 기본적인 함수들의 모음으로, 초기 C 언어에는 내장 함수가 부족하여 사용자 커뮤니티가 개발한 개념이 표준으로 채택되었다. 1980년대 다양한 C 구현 간 호환성 문제를 해결하기 위해 ANSI C 표준이 제정되었고, 이후 ISO 표준으로 발전하며 기능이 추가되었다. 주요 기능으로는 다양한 헤더 파일에 정의된 API를 통해 진단, 복소수 연산, 문자 조작, 오류 처리, 부동 소수점, 정수형 크기, 문화권, 수학, 비지역 분기, 시그널, 가변 인수, 공통 정의, 정수형 서식 변환, 대체 철자, 정렬, 논리형, 입출력, 일반 유틸리티, 문자열 조작, 형 총칭 수학 함수, 스레드, 날짜 및 시간, 유니코드, 다중 바이트/와이드 문자 등을 지원한다. 하지만 버퍼 오버플로우, 스레딩, 오류 처리 등에서 문제점이 지적되어 왔으며, 안전한 코딩을 위한 기술 보고서가 발행되기도 했다. C 표준 라이브러리는 다른 언어의 표준 라이브러리에 영향을 미쳤으며, C++과 Python, Rust 등에서 C 표준 라이브러리의 기능을 활용한다. C 표준 라이브러리는 다른 언어에 비해 작지만, 다양한 플랫폼에서 C 언어를 쉽게 사용할 수 있게 해준다.

더 읽어볼만한 페이지

  • C 표준 라이브러리 - 파일 끝
    파일 끝(EOF)은 데이터 소스에서 더 이상 읽을 데이터가 없음을 나타내는 조건이다.
  • C 표준 라이브러리 - C 자료형
    C 자료형은 C 언어에서 데이터 형태를 정의하는 기본 요소로, 다양한 크기와 속성을 가진 산술, 부울 자료형과 구조체, 공용체 등을 제공하며, 컴파일러 및 시스템 아키텍처에 따라 크기와 동작 방식이 달라질 수 있다.
  • C 프로그래밍 언어 - C (프로그래밍 언어)
    C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다.
  • C 프로그래밍 언어 - 헤더 파일
    헤더 파일은 프로그래밍 언어에서 코드 재사용성, 모듈화, 컴파일 시간 단축에 기여하며 함수 프로토타입, 변수 선언 등을 포함하고 `#include` 지시어로 소스 코드에 포함되어 사용되는 파일이다.
C 표준 라이브러리
일반 정보
종류표준 라이브러리
개발 언어C 언어
표준화ANSI
ISO
역사
표준ANSI C (ANSI X3.159-1989)
ISO/IEC 9899:1990
ISO/IEC 9899:1999
ISO/IEC 9899:2011
ISO/IEC 9899:2018
내용
주요 내용자료형
문자 분류
문자열
수식
표준 입출력
날짜와 시간
로컬라이제이션
메모리 할당
프로세스 관리
시그널
대체 토큰
기타 내용


관련 정보
관련 문서POSIX
GNU C 라이브러리

2. 역사

초기 C 언어는 COBOL, Fortran, 파스칼, PL/I 등과 같은 기존 프로그래밍 언어와 달리 문자열 조작, 입출력 등의 기본적인 기능을 내장하지 않았다. 시간이 지나면서 C 사용자 커뮤니티는 현재 C 표준 라이브러리의 원형이 되는 아이디어와 구현을 공유했고, 이 중 상당수가 표준화된 C 언어 정의에 통합되었다.

C 언어 보급과 함께 언어 사양과 마찬가지로 라이브러리에도 많은 방언이 생겨났지만, 1989년 미국 국립 표준 협회(ANSI)의 C 언어 표준 규격(ISO/IEC 9899:1990) 제정으로 통일되었고, 몇 가지 새로운 개념이 도입되면서 표준 C 라이브러리가 되었다.[1]

이후 표준 규격 개정은 주로 표준 C 라이브러리에 기능을 추가하는 방향으로 이루어졌다.[1] 1995년(ISO/IEC 9899/AMD1:1995)에는 와이드 문자 조작 관련 함수군이, 1999년(ISO/IEC 9899:1999, C99)에는 복소수 및 수학 연산 관련 함수군이 대폭 추가되었다. 2011년(ISO/IEC 9899:2011, C11)에는 정렬, 멀티스레드, 유니코드, 메모리 경계 검사 함수 등이 추가되었다.[1]

프리 스탠딩 환경에서 C89는 표준 C 라이브러리 중 `float.h`, `limits.h`, `stdarg.h`, `stddef.h`를 지원한다. ISO/IEC 9899/AMD1:1995에서는 `iso646.h`가 추가되었고, C99에서는 `stdbool.h` 및 `stdint.h`가 추가 지원된다.

유닉스 계열POSIX, SUS, Linux Standard Base 등 표준 사양에서는 표준 C 라이브러리를 포함하며, 추가적인 함수, 매크로, 형 등을 규정하고 있다. GNU/리눅스 (많은 리눅스 배포판)에서는 GNU C 라이브러리(glibc)가, BSD 계열에서는 BSD libc가 표준 C 라이브러리 구현으로 사용된다.

2. 1. C 언어의 기원과 벨 연구소

벨 연구소에서 1960년대 후반 ~ 1970년대 초반에 유닉스C 언어가 개발되었다. 초기 C 언어는 COBOL, Fortran과 같은 기존 언어와 달리 입출력 연산 등 기본적인 내장 함수가 없었다. 이후 사용자 커뮤니티에서 C 표준 라이브러리의 원형이 되는 아이디어와 구현을 공유했다.

2. 2. ANSI C 표준화 (C89)

1983년 미국 국립 표준 협회(ANSI)는 C의 표준 사양을 수립하기 위한 위원회를 구성했는데, 이는 ANSI C로 알려지게 되었다. 이 작업은 1989년 C89 표준이 만들어지면서 완료되었다. 이 표준의 일부는 ANSI C 표준 라이브러리라고 불리는 일련의 소프트웨어 라이브러리였다.

2. 3. ISO C 표준화 (C90, C95, C99, C11, C17, C23)

1989년 미국 국립 표준 협회(ANSI)에 의해 C 언어의 표준 규격(ISO/IEC 9899:1990)이 제정되면서 표준 C 라이브러리가 통일되었고, 몇 가지 새로운 개념이 도입되었다.[1]

이후 표준 규격 개정은 주로 표준 C 라이브러리에 기능을 추가하는 방향으로 이루어졌다. 주요 내용은 다음과 같다.

  • 1995년 (ISO/IEC 9899/AMD1:1995): 와이드 문자 조작 관련 함수군이 대폭 추가되었다.[1]
  • 1999년 (ISO/IEC 9899:1999, C99): 복소수 및 수학 연산 관련 함수군이 대폭 추가되었다.[1]
  • 2011년 (ISO/IEC 9899:2011, C11): 정렬, 멀티스레드, 유니코드, 메모리 경계 검사 함수 등이 추가되었다.[1]

3. 주요 기능

C 언어는 파스칼이나 PL/I 등 기존 프로그래밍 언어와 달리 문자열 조작이나 입출력 등 기본적인 기능을 내장하지 않았다. 이후 C 언어 사용자는 현재 표준 C 라이브러리의 원형이 되는 개념과 구현을 공유하게 되었다.

C 언어 보급과 함께 라이브러리에서도 많은 방언이 생겨났지만, 1989년(ISO/IEC 9899:1990) ANSI에 의한 C 언어 표준 규격 제정으로 통일되었고, 몇 가지 새로운 개념이 도입되면서 표준 C 라이브러리가 되었다.

이후 표준 규격 개정은 주로 표준 C 라이브러리에 기능을 추가하는 방향으로 이루어졌다. 1995년(ISO/IEC 9899/AMD1:1995)에는 와이드 문자 조작 관련 함수군이, 1999년(ISO/IEC 9899:1999, C99)에는 복소수 및 수학 연산 관련 함수군이 대폭 추가되었다. 2011년(ISO/IEC 9899:2011, C11)에는 정렬, 멀티스레드, 유니코드, 메모리 경계 검사 함수 등이 추가되었다.

3. 1. 표준 헤더

C 표준 라이브러리의 API는 여러 헤더 파일에 선언되어 있으며, 각 헤더 파일은 하나 이상의 함수 선언, 데이터 형식 정의, 매크로를 포함한다. 표준화 과정을 거치면서 헤더 파일들이 추가되었다. (예: C99, C11)

C11 (ISO/IEC 9899:2011) 표준 헤더는 다음과 같다.

C11 표준 헤더 목록
헤더 파일첫 등장개요
``진단 기능
``C99복소수 계산
``문자 조작
``에러
``C99부동 소수점 환경
``부동 소수점 형식의 특성
``C99정수형 서식 변환
``AMD1[48]대체 철자
``정수형 크기
``문화권 고유 조작
``수학
``비지역 분기
``시그널 조작
``C11정렬
``가변 인수
``C11원자적 연산
``C99논리형
``공통 정의
``C99정수형
``입출력
``일반 유틸리티
``C11`_Noreturn`
``문자열 조작
``C99형 총칭 수학 함수
``C11멀티 스레드
``날짜 및 시간
``C11유니코드 유틸리티
``AMD1[48]다중 바이트 및 와이드 문자 확장 유틸리티
``AMD1[48]와이드 문자 분류 및 변환



``, ``, ``는 구현에 따라 지원되지 않을 수 있다. (조건부 기능)

POSIX 표준은 유닉스 계열 시스템을 위한 비표준 C 헤더를 추가한다.

3. 1. 1. 진단 기능 (`assert.h`)

#include

```

`assert.h`는 `assert` 매크로를 정의하며, 프로그램의 논리 오류나 다른 종류의 버그를 디버깅하는 데 사용된다. `assert` 매크로는 런타임에 진단을 수행한다.[1]

  • `assert` 매크로는 `NDEBUG` 매크로의 정의 여부에 따라 활성화 또는 비활성화된다.
  • `NDEBUG`가 정의되지 않은 경우: `assert` 매크로는 런타임 진단을 수행한다.
  • `NDEBUG`가 정의된 경우: `assert` 매크로는 아무런 동작도 하지 않는다.


C11 표준에서는 컴파일 타임에 어설션(assertion)을 수행하는 `static_assert`가 추가되었다. `static_assert`는 번역 시점에 확정되는 식을 대상으로 어설션을 수행한다.[1]

3. 1. 2. 복소수 (`complex.h`)

C99에서 추가된 헤더 파일로, 복소수를 다루기 위한 함수들을 정의한다.[1]

이 헤더 파일은 복소수 연산, 허수 단위 정의, 실수부와 허수부 분리 기능 등을 포함한다.[1]

3. 1. 3. 문자 조작 (`ctype.h`)

`ctype.h`는 문자 분류 및 대소문자 변환 함수를 제공하는 헤더 파일이다.[1] 이 함수들은 설정된 로케일에 따라 동작이 변경될 수 있다.[1]

다음은 `ctype.h`에 정의된 주요 함수들이다.[1]

  • `isalnum` : 영숫자인지 판별한다.
  • `isalpha` : 영문자인지 판별한다.
  • `isblank` : 단어를 구분하는 문자인지 판별한다.
  • `iscntrl` : 제어 문자인지 판별한다.
  • `isdigit` : 숫자인지 판별한다.
  • `isgraph` : 공백(' ')을 제외한 표시 문자인지 판별한다.
  • `islower` : 소문자인지 판별한다.
  • `isprint` : 표시 문자인지 판별한다.
  • `ispunct` : 구두점 문자인지 판별한다.
  • `isspace` : 공백류 문자인지 판별한다.
  • `isupper` : 대문자인지 판별한다.
  • `isxdigit` : 16진수 숫자인지 판별한다.
  • `tolower` : 소문자로 변환한다.
  • `toupper` : 대문자로 변환한다.

3. 1. 4. 에러 (`errno.h`)

라이브러리 함수 내에서 오류가 발생한 경우, 해당 오류의 내용을 보고하기 위해 다음의 몇 가지 매크로가 정의되어 있다.

  • `errno` — 오류 번호를 저장하는 `int`형 변수를 참조하는 매크로. 겉보기에는 `int`형의 변경 가능한 좌변값식으로 전개된다[49]. C11 이후 스레드가 표준화됨에 따라, 스레드 로컬 기억 영역 기간 (thread local storage duration)을 갖도록 규정되었다[50].
  • `EDOM` — 정의역 오류
  • `ERANGE` — 범위 오류
  • `EILSEQ` — 멀티바이트 문자의 부정한 배열

3. 1. 5. 부동 소수점 형식 (`float.h`)

C 표준 라이브러리의 헤더 파일인 `float.h`는 부동 소수점 형식의 크기 및 특성을 나타내는 매크로들을 정의한다. 이 매크로들은 `float`, `double`, `long double` 형식에 대한 정보를 제공한다.

  • `FLT_RADIX`는 부동 소수점 형식의 내부 표현에 사용되는 기수를 나타낸다.
  • `FLT_ROUNDS`는 부동 소수점 덧셈의 반올림 모드를 나타낸다.
  • `FLT_MANT_DIG`, `DBL_MANT_DIG`, `LDBL_MANT_DIG`는 각각 `float`, `double`, `long double` 형식의 가수 부분의 자릿수를 `FLT_RADIX`를 기수로 하여 나타낸다.
  • `FLT_MAX_EXP`, `DBL_MAX_EXP`, `LDBL_MAX_EXP`는 각각 `float`, `double`, `long double` 형식의 지수 부분의 최댓값을 `FLT_RADIX`를 기수로 하여 나타낸다.
  • `FLT_MIN_EXP`, `DBL_MIN_EXP`, `LDBL_MIN_EXP`는 각각 `float`, `double`, `long double` 형식의 지수 부분의 최솟값을 `FLT_RADIX`를 기수로 하여 나타낸다.
  • `FLT_MAX_10_EXP`, `DBL_MAX_10_EXP`, `LDBL_MAX_10_EXP`는 각각 `float`, `double`, `long double` 형식의 지수 부분의 최댓값을 10을 기수로 하여 나타낸다.
  • `FLT_MIN_10_EXP`, `DBL_MIN_10_EXP`, `LDBL_MIN_10_EXP`는 각각 `float`, `double`, `long double` 형식의 지수 부분의 최솟값을 10을 기수로 하여 나타낸다.
  • `FLT_MAX`, `DBL_MAX`, `LDBL_MAX`는 각각 `float`, `double`, `long double` 형식의 최댓값을 나타낸다.
  • `FLT_MIN`, `DBL_MIN`, `LDBL_MIN`는 각각 `float`, `double`, `long double` 형식의 양의 최솟값을 나타낸다. (정수 형식과는 달리 `float`, `double`, `long double` 형식의 실수 최솟값은 각각 `-FLT_MAX`, `-DBL_MAX`, `-LDBL_MAX`이다.)
  • `FLT_EPSILON`, `DBL_EPSILON`, `LDBL_EPSILON`은 각각 `float`, `double`, `long double` 형식으로 표현 가능한 1보다 큰 가장 작은 값과 1의 차이를 나타낸다. (머신 엡실론)[1]

3. 1. 6. 정수형 크기 (`limits.h`)

limits.h영어는 정수형 타입의 구현별 속성을 지정하는 매크로 상수를 정의한다.[51]

상수설명
`CHAR_BIT`1바이트의 비트 수(8 이상)
`MB_LEN_MAX`처리계가 지원하는 멀티바이트 문자의 최대 바이트 수
`CHAR_MAX``char`형의 최대값. `SCHAR_MAX` 또는 `UCHAR_MAX`와 같음
`CHAR_MIN``char`형의 최소값. `SCHAR_MIN` 또는 0과 같음
`SCHAR_MAX``signed char` 형의 최대값(127 이상)
`SCHAR_MIN``signed char` 형의 최소값(-127 이하)
`UCHAR_MAX``unsigned char` 형의 최대값(255 이상)
`SHRT_MAX``short`형의 최대값(32767 이상)
`SHRT_MIN``short`형의 최소값(-32767 이하)
`USHRT_MAX``unsigned short`형의 최대값(65535 이상)
`INT_MAX``int`형의 최대값(32767 이상)
`INT_MIN``int`형의 최소값(-32767 이하)
`UINT_MAX``unsigned int`형의 최대값(65535 이상)
`LONG_MAX``long`형의 최대값(2147483647 이상)
`LONG_MIN``long`형의 최소값(-2147483647 이하)
`ULONG_MAX``unsigned long`형의 최대값(4294967295 이상)


3. 1. 7. 문화권 고유 조작 (`locale.h`)

로케일별로 다른 문자 코드, 수치를 기술하는 경우의 서식 등의 조작을 수행하는 형, 매크로, 함수의 선언/정의를 포함한다.

  • `struct lconv` — 수치를 기술하는 경우의 서식에 관한 정보를 격납하는 구조체
  • `localeconv` — 설정되어 있는 로케일에 따른 값을 격납한 `struct lconv`를 참조
  • `setlocale` — 현재의 로케일을 설정

3. 1. 8. 수학 (`math.h`)

#include

```

C 표준 라이브러리의 `math.h` 헤더는 일반적인 수학 함수 및 관련 매크로를 정의한다.

3. 1. 9. 비지역 분기 (`setjmp.h`)

함수 범위를 벗어나는 분기(점프)를 제어하기 위한 형, 매크로, 함수 선언/정의를 포함한다.

  • `jmp_buf` — setjmp영어 매크로가 실행 환경을 저장하기 위한 형식
  • setjmp영어 — longjmp영어 함수에 의한 복귀를 가능하게 하기 위해 실행 환경을 저장하기 위한 매크로 (종종 직접 함수로 구현되지만, 표준에서는 매크로로 되어 있다. POSIX에서는 매크로인지 함수인지는 지정되지 않는 것으로 하고 있다)
  • longjmp영어 — setjmp영어 매크로로 저장된 환경으로 복귀

3. 1. 10. 시그널 조작 (`signal.h`)

시그널 처리 함수 등록 및 시그널 전송에 관한 매크로, 형식, 함수의 선언 및 정의를 포함한다.

  • `sig_atomic_t` — 대입 및 참조가 분할되지 않고 실행되는 (원자적 연산이 되는) 정수형
  • `raise` — 시그널 전송
  • `signal` — 시그널 처리 함수의 등록

3. 1. 11. 가변 인수 (`stdarg.h`)

c

#include

```

`#include `는 가변 인수 함수에서 인수들을 조작하는 데 사용되는 형(type)과 매크로 정의를 포함한다.[1]

  • `va_list`: 가변 인수의 정보를 저장하는 데 사용되는 형식이다.
  • `va_arg`: 가변 인수 목록에서 다음 인수를 추출한다.
  • `va_start`: 가변 인수 처리를 시작한다.
  • `va_end`: 가변 인수 처리를 종료한다.

3. 1. 12. 공통 정의 (`stddef.h`)

`stddef.h`는 처리계에 의존하는 여러 유용한 타입과 매크로를 정의한다.[1]

  • `ptrdiff_t`: 포인터 뺄셈 결과의 형으로, 부호 있는 정수형이다.[1]
  • `size_t`: `sizeof` 연산자 결과의 형으로, 부호 없는 정수형이다. POSIX 1003.1-1996 API를 준수하는 Unix 계열 등에서는 `ssize_t`가 부호 있는 `size_t`이다.[1]
  • `wchar_t`: 와이드 문자형으로, 8비트 이상의 정수이지만 컴파일러나 플랫폼에 따라 크기가 다르다. Microsoft Windows에서는 16비트, Unix 계열에서는 32비트인 경우가 많다.[1]
  • `NULL`: 널 포인터 상수 매크로이다.[1]
  • `offsetof`: 구조체 멤버의 선두로부터의 오프셋을 얻는다.[1]

3. 1. 13. 정수형 서식 변환 (`inttypes.h`)

C99에서 추가되었다. 정확한 너비의 정수 유형을 정의한다.[1]

이름From설명
C99정확한 너비의 정수 유형을 정의한다.


3. 1. 14. 대체 철자 (`iso646.h`)

1995년에 C 표준의 규범적 부록 1(NA1)에서 추가되었다. 여러 표준 토큰을 표현하기 위한 대체 방법을 구현하는 여러 매크로를 정의한다. ISO 646 변형 문자 집합으로 프로그래밍하기 위한 것이다.

3. 1. 15. 정렬 (`stdalign.h`)

C11영어에서 추가되었다. 객체의 정렬을 질의하고 명시하기 위한 기능을 제공한다.

3. 1. 16. 논리형 (`stdbool.h`)

C99에서 추가되었다. 불린 데이터 형을 정의한다.[1]

3. 1. 17. 정수형 (`stdint.h`)

C99에서 추가되었으며, 정확한 너비의 정수형을 정의한다.[1]

이름설명
``정확한 너비의 정수 유형을 정의한다.


3. 1. 18. 입출력 (`stdio.h`)

C 표준 라이브러리의 핵심 입력 및 출력 함수들을 정의한다. 스트림 및 파일 조작에 관련된 형, 매크로, 함수들을 포함한다.[1]

  • `FILE`: 스트림을 제어하기 위한 객체형이다. (구조체일 필요는 없다)[1]
  • `fpos_t`: 파일의 시크 위치를 저장하기 위한 형이다.[1]
  • `clearerr`: 파일 종단 표시자와 에러 표시자를 클리어한다.[1]
  • `fclose`: 파일을 닫는다.[1]
  • `feof`: 파일 종단 표시자를 판정한다.[1]
  • `ferror`: 에러 표시자를 판정한다.[1]
  • `fgetc`: 스트림에서 1문자를 입력받는다.[1]
  • `fgetpos`: 스트림의 파일 위치 표시자를 참조한다.[1]
  • `fgets`: 스트림에서 1행을 입력받는다.[1]
  • `fopen`: 파일을 연다.[1]
  • `fprintf`: 스트림에 서식 있는 출력을 한다.[1]
  • `fputc`: 스트림에 1문자를 출력한다.[1]
  • `fputs`: 스트림에 1행을 출력한다.[1]
  • `fread`: 스트림에서 읽는다.[1]
  • `fscanf`: 스트림에서 서식 있는 입력을 받는다.[1]
  • `fseek`: 스트림의 파일 위치 표시자를 변경한다.[1]
  • `fsetpos`: 스트림의 파일 위치 표시자를 설정한다.[1]
  • `ftell`: 스트림의 파일 위치 표시자를 참조한다.[1]
  • `fwrite`: 스트림에 쓴다.[1]
  • `getc`: 스트림에서 1문자를 입력받는다.[1]
  • `getchar`: 표준 입력에서 1문자를 입력받는다.[1]
  • `gets`: 표준 입력에서 1행을 입력받는다. (C11에서 삭제됨)[1]
  • `perror`: 표준 에러 출력에 에러 메시지를 출력한다.[1]
  • `printf`: 표준 출력에 서식 있는 출력을 한다.[1]
  • `putc`: 스트림에 1문자를 출력한다.[1]
  • `putchar`: 표준 출력에 1문자를 출력한다.[1]
  • `puts`: 표준 출력에 1행을 출력한다.[1]
  • `remove`: 파일을 삭제한다.[1]
  • `rename`: 파일명을 변경한다.[1]
  • `rewind`: 스트림을 되감는다.[1]
  • `scanf`: 표준 입력에서 서식 있는 입력을 받는다.[1]
  • `setbuf`: 스트림의 버퍼를 설정한다.[1]
  • `setvbuf`: 스트림의 상세한 버퍼를 설정한다.[1]
  • `sprintf`: 문자 배열에 서식 있는 출력을 한다.[1]
  • `sscanf`: 문자열에서 서식 있는 입력을 받는다.[1]
  • `tmpfile`: 임시 파일을 바이너리 모드로 연다.[1]
  • `tmpnam`: 임시 파일명을 생성한다.[1]
  • `vprintf`: 표준 출력에 서식 있는 출력을 한다. (`va_list` 버전)[1]
  • `vscanf`: 표준 입력에서 서식 있는 입력을 받는다. (`va_list` 버전)[1]

3. 1. 19. 일반 유틸리티 (`stdlib.h`)

``는 숫자 변환, 의사 난수 생성, 메모리 할당, 프로세스 제어 등 일반적인 유틸리티 기능을 제공하는 C 표준 라이브러리의 헤더 파일이다.

  • 자료형:
  • `div_t`: `div` 함수가 반환하는 몫과 나머지를 저장하는 구조체.
  • `ldiv_t`: `ldiv` 함수가 반환하는 `long` 형의 몫과 나머지를 저장하는 구조체.

  • 매크로:
  • `MB_CUR_MAX`: 현재 로케일에서 멀티바이트 문자의 최대 바이트 수.
  • `RAND_MAX`: `rand` 함수가 반환하는 의사 난수의 최댓값.

  • 함수:
  • `abort`: 프로그램 비정상 종료.
  • `abs`: 정수(`int`)의 절댓값 계산.
  • `aligned_alloc`: 지정된 정렬에 따라 메모리 블록 할당 (C11에서 추가).
  • `atexit`: 프로그램 정상 종료 시 호출될 함수 등록.
  • `at_quick_exit`: 프로그램 빠른 종료 시 호출될 함수 등록 (C11에서 추가).
  • `atof`: 문자열을 `double` 형으로 변환.
  • `atoi`: 문자열을 `int` 형으로 변환.
  • `atol`: 문자열을 `long` 형으로 변환.
  • `bsearch`: 배열에서 이진 검색 수행.
  • `calloc`: 메모리 블록 할당 및 0으로 초기화.
  • `div`: 정수(`int`) 나눗셈의 몫과 나머지 계산.
  • `exit`: 프로그램 정상 종료.
  • `free`: 동적으로 할당된 메모리 블록 해제.
  • `getenv`: 환경 변수 값 가져오기.
  • `labs`: `long` 형 정수의 절댓값 계산.
  • `ldiv`: `long` 형 정수 나눗셈의 몫과 나머지 계산.
  • `malloc`: 메모리 블록 할당.
  • `mblen`: 멀티바이트 문자의 바이트 수 계산.
  • `mbstowcs`: 멀티바이트 문자열을 와이드 문자열로 변환.
  • `mbtowc`: 멀티바이트 문자를 와이드 문자로 변환.
  • `qsort`: 퀵 정렬(사양에는 정렬 수행이라고만 명시).
  • `quick_exit`: 프로그램 빠른 종료 (C11에서 추가).
  • `rand`: 의사 난수 생성.
  • `realloc`: 기존에 할당된 메모리 블록 크기 변경.
  • `srand`: 의사 난수 생성 시드 설정.
  • `strtod`: 문자열을 `double` 형으로 변환.
  • `strtol`: 문자열을 `long` 형으로 변환(진법 지정 가능).
  • `strtoul`: 문자열을 `unsigned long` 형으로 변환(진법 지정 가능).
  • `system`: 시스템 명령어 실행.
  • `wcstombs`: 와이드 문자열을 멀티바이트 문자열로 변환.
  • `wctomb`: 와이드 문자를 멀티바이트 문자로 변환.


`aligned_alloc`, `at_quick_exit`, `quick_exit` 함수는 C11 표준에서 추가되었다.

3. 1. 20. `_Noreturn` (`stdnoreturn.h`)

C11영어에서 추가되었으며, 반환하지 않는 함수를 명시하기 위한 기능을 제공한다.

3. 1. 21. 문자열 조작 (`string.h`)

c

#include

```

C 표준 라이브러리의 헤더 파일 `string.h`는 문자열 조작과 관련된 함수들을 정의한다.

  • `memchr` - 메모리 블록 내에서 특정 문자를 찾는다.
  • `memcmp` - 두 메모리 블록을 비교한다.
  • `memcpy` - 메모리 블록을 복사한다.
  • `memmove` - 메모리 블록을 이동한다. (복사하는 영역과 대상 영역이 겹쳐도 안전하게 처리)
  • `memset` - 메모리 블록을 특정 문자로 채운다.
  • `strchr` - 문자열 내에서 특정 문자를 찾는다.
  • `strcat` - 두 문자열을 연결한다.
  • `strcmp` - 두 문자열을 비교한다.
  • `strcpy` - 문자열을 복사한다.
  • `strcspn` - 특정 문자 집합에 포함되지 않는 문자들로만 이루어진, 문자열의 시작 부분의 길이를 구한다.
  • `strerror` - 오류 번호에 해당하는 오류 메시지 문자열을 가져온다.
  • `strcoll` - 현재 로케일(locale)에 따른 순서로 두 문자열을 비교한다.
  • `strlen` - 문자열의 길이를 구한다.
  • `strncat` - 지정된 개수만큼의 문자만을 두 문자열에 연결한다.
  • `strncmp` - 지정된 개수만큼의 문자만을 사용하여 두 문자열을 비교한다.
  • `strncpy` - 지정된 개수만큼의 문자만을 문자열에 복사한다.
  • `strpbrk` - 문자열에서 특정 문자 집합에 속하는 첫 번째 문자를 찾는다.
  • `strrchr` - 문자열 내에서 특정 문자를 뒤에서부터 찾는다.
  • `strspn` - 특정 문자 집합에 속하는 문자들로만 이루어진, 문자열의 시작 부분의 길이를 구한다.
  • `strstr` - 문자열 내에서 특정 부분 문자열을 찾는다.
  • `strtok` - 문자열을 토큰(token)으로 분리한다.
  • `strxfrm` - 현재 로케일에 따라 문자열을 변환한다. (문자열 비교를 위한 변환)[1]

3. 1. 22. 형 총칭 수학 함수 (`tgmath.h`)

C99에서 추가되었다. 형에 따라 적절한 수학 함수를 호출하는 매크로를 제공한다.

3. 1. 23. 스레드 (`threads.h`)

C11에서 추가되었다. 다중 스레드, 뮤텍스조건 변수를 관리하는 함수들을 정의한다. 구현은 필수가 아니다.

3. 1. 24. 날짜 및 시간 (`time.h`)

`time.h`는 날짜 및 시간 처리와 관련된 형, 매크로, 함수를 선언하고 정의한다. 여기에는 다음이 포함된다.

  • `clock_t`: `clock` 함수가 반환하는 값의 형이다.
  • `time_t`: 시간을 나타내는 형이다.
  • `struct tm`: 역 시간의 각 요소 (년, 월, 일, 시, 분, 초 등)를 저장하는 구조체이다.
  • `CLOCKS_PER_SEC`: `clock` 함수가 반환하는 값을 초 단위로 변환하기 위한 제수를 나타내는 매크로 상수이다.
  • `asctime`: `tm` 구조체를 문자열로 변환한다.
  • `clock`: 처리계 정의 시작점 (일반적으로 프로그램 실행 시작)부터의 경과 시간 (프로세서 시간, CPU 사용 시간)을 가져온다.
  • `ctime`: `time_t` 형을 문자열로 변환한다.
  • `difftime`: `time_t` 형 간의 초 단위 차이를 계산한다.
  • `gmtime`: 협정 세계시(UTC)를 가져온다.
  • `localtime`: 지방 시간을 가져온다.
  • `mktime`: `tm` 구조체를 `time_t` 형으로 변환한다.
  • `strftime`: `tm` 구조체를 지정된 형식에 맞춰 문자열로 변환한다.
  • `time`: 현재의 역 시간 (calendar time)을 가져온다.


`time_t`는 특히 UNIX용 구현을 비롯한 많은 구현에서 협정 세계시(UTC) 1970년 1월 1일 0시 0분 0초부터의 경과 초수를 부호 있는 32비트 정수형으로 나타내도록 되어 있다. 이러한 구현에서는 2001년 9월 9일 문제, 2038년 문제와 같은 문제가 발생한다.

3. 1. 25. 유니코드 유틸리티 (`uchar.h`)

C11에서 추가되었다. 유니코드 문자 처리 함수를 제공한다.

`uchar.h`에 정의된 함수 및 타입은 다음과 같다.

이름설명
`uchar.h`유니코드 문자들과 이것을 조작하는 함수들


3. 1. 26. 다중 바이트/와이드 문자 확장 유틸리티 (`wchar.h`)

1995년에 비준된 C 표준의 부록인 '규범적 부록 1'(NA1)을 통해 추가된 헤더 파일 중 하나로, 와이드 문자열 처리 함수를 정의한다.

3. 1. 27. 와이드 문자 분류 및 대소문자 변환 유틸리티 (`wctype.h`)

1995년에 승인된 C 표준의 부록인 '규범적 부록 1'(NA1)을 통해 C 표준 라이브러리에 추가된 헤더 파일 중 하나로, 와이드 문자를 분류하고 대소문자를 변환하는 함수들을 정의한다.

이 헤더 파일은 `wchar.h`와 함께 와이드 문자열 처리를 지원하기 위해 도입되었다. 와이드 문자는 `char` 형식보다 더 큰 문자 집합을 표현할 수 있도록 설계되었다. 예를 들어, 유니코드와 같이 더 많은 문자를 표현할 때 사용될 수 있다.

`wctype.h`에 정의된 함수들은 다음과 같은 기능을 수행한다.

  • 와이드 문자 분류: 주어진 와이드 문자가 특정 분류에 속하는지 확인한다. (예: 알파벳, 숫자, 공백 등)
  • 와이드 문자 대소문자 변환: 주어진 와이드 문자의 대소문자를 변환한다. (예: 소문자를 대문자로, 대문자를 소문자로)


이러한 함수들은 `ctype.h`에 정의된 함수들과 유사하지만, 와이드 문자를 대상으로 한다는 점에서 차이가 있다.

다음은 `wctype.h`에 정의된 함수들을 나타낸 표이다.

함수설명
`iswalnum()`와이드 문자가 알파벳 또는 숫자인지 확인
`iswalpha()`와이드 문자가 알파벳인지 확인
`iswblank()`와이드 문자가 빈칸인지 확인
`iswcntrl()`와이드 문자가 제어 문자인지 확인
`iswdigit()`와이드 문자가 숫자인지 확인
`iswgraph()`와이드 문자가 그래픽 문자인지 확인
`iswlower()`와이드 문자가 소문자인지 확인
`iswprint()`와이드 문자가 출력 가능한 문자인지 확인
`iswpunct()`와이드 문자가 구두점 문자인지 확인
`iswspace()`와이드 문자가 공백 문자인지 확인
`iswupper()`와이드 문자가 대문자인지 확인
`iswxdigit()`와이드 문자가 16진수 숫자인지 확인
`towlower()`와이드 문자를 소문자로 변환
`towupper()`와이드 문자를 대문자로 변환
`wctype()`와이드 문자 분류를 위한 타입을 표현
`iswctype()`와이드 문자가 특정 분류에 속하는지 확인


4. 구현

C 표준 라이브러리는 다양한 운영 체제와 컴파일러에서 구현되어 제공된다. 주요 구현체는 다음과 같다.


  • BSD libc: BSD 운영 체제에서 사용된다.
  • GNU C 라이브러리 (glibc): 리눅스, GNU 허드, GNU/kFreeBSD 등에서 사용된다.
  • 마이크로소프트 C 런타임 라이브러리: 마이크로소프트 비주얼 C++의 일부로 제공된다. 윈도우 10 및 11의 UCRT(Universal C Run Time)는 C99를 준수한다.
  • dietlibc: C 표준 라이브러리의 대안적인 소규모 구현 (MMU 없음)
  • μClibc: 임베디드 μClinux 시스템용 C 표준 라이브러리 (MMU 없음)
  • uclibc-ng: μClibc의 포크, 메모리 관리 장치 (MMU) 지원
  • Newlib: 임베디드 시스템용 C 표준 라이브러리[5] 및 윈도우용 Cygwin GNU 배포판에서 사용
  • klibc: 주로 리눅스 시스템 부팅용
  • musl: 리눅스 시스템을 위한 경량 C 표준 라이브러리 구현[6]
  • Bionic: 구글이 안드로이드 임베디드 시스템 운영 체제를 위해 개발, BSD libc에서 파생
  • picolibc: Keith Packard가 개발, Newlib 및 AVR Libc의 코드를 기반으로 RAM이 제한된 소규모 임베디드 시스템을 타겟팅


유닉스 계열 시스템에서 C 라이브러리는 운영 체제의 일부로 간주되며, C 표준 함수 외에도 POSIX 표준에 지정된 함수 등 운영 체제 API의 일부인 다른 함수도 포함한다.

마이크로소프트 윈도우에서 핵심 시스템 DLL는 마이크로소프트 비주얼 C++ 컴파일러를 위한 C 표준 라이브러리의 구현을 제공한다.

4. 1. 컴파일러 빌트인 함수

몇몇 컴파일러(예를 들면 GCC[56])는 C 표준 라이브러리에서 많은 함수들의 빌트인 버전을 제공한다. 즉, 함수들의 구현은 컴파일된 목적 파일로 쓰여지며 프로그램은 C 라이브러리 공유 목적 파일에 있는 함수들 대신 빌트인 버전을 호출한다. 이것은 특히 함수 호출이 인라인 형태로 대체된다면 함수 호출 오버헤드를 감소시키며, 최적화의 다른 형태(컴파일러가 빌트인 형태의 제어 흐름 특징을 알 때)를 허용하지만 디버깅 시에 혼란을 야기할 수 있다(예를 들면 빌트인 버전은 인스트루멘트된 형태로 대체될 수 없다).[7]

그러나 빌트인 함수는 반드시 ISO C에 따라 기본 함수처럼 행동해야 한다. 중요한 것은 프로그램이 반드시 이러한 함수를 가리키는 포인터를 주소를 사용해서 생성할 수 있어야 하고, 이 포인터로 함수를 발생시킬 수 있어야 한다. 만약 같은 함수에 대한 두 포인터가 프로그램에서 두 다른 변환 유닛으로 만들어진다면, 이러한 두 포인터는 반드시 같아야 한다. 즉, 외부 링크를 갖는 함수의 이름을 리졸브해서 얻은 주소이다.

4. 2. 링킹, libm

리눅스, FreeBSD 등에서는 수학 함수(`math.h`에 정의된)는 별도의 수학 라이브러리 libm에 묶여 있을 수 있다.[57] 이 경우 링커에 `-lm` 옵션을 지정해야 한다.[57] FreeBSD[8]와 glibc[9]에서 sin()과 같은 일부 함수는 기본적으로 링크되지 않고 libm이라는 수학 라이브러리에 포함되어 있다. 이러한 함수를 사용할 경우 링커에 `-lm` 지시어를 사용해야 한다.

4. 3. 탐지

C 표준에 따르면, 구현이 호스트된 경우 `__STDC_HOSTED__` 매크로는 '''1'''로 정의된다. 호스트된 구현은 C 표준에 명시된 모든 헤더를 갖는다. 구현은 ''freestanding''일 수도 있는데, 이는 이러한 헤더가 존재하지 않음을 의미한다. 구현이 ''freestanding''이면 `__STDC_HOSTED__`는 '''0'''으로 정의된다.[5]

5. 문제점 및 해결책

C 표준 라이브러리의 일부 함수는 버퍼 오버플로우 취약점으로 악명이 높았으며, 버그를 유발하는 프로그래밍을 조장한다는 비판을 받아왔다.[12] 1988년 이전에 `gets()`의 취약점을 악용한 모리스 웜이 생성되기도 했다.

이러한 문제점을 해결하기 위해 ISO C 위원회는 기술 보고서 TR 24731-1[12]을 발행하고 TR 24731-2[13]를 작성하여, 범위 검사 및 자동 버퍼 할당을 포함하는 함수들을 제안했다. TR 24731-1은 C11 표준[12]의 부록 K에 포함되었으며, Win32 및 Win64 플랫폼용 Microsoft의 C/++ 런타임 라이브러리(CRT)에 구현되었다.

하지만 TR 24731-1은 심각한 비판을 받기도 했으며,[14][15] TR 24731-2는 엇갈린 반응을 얻었다. 마이크로소프트의 구현도 TR 24731-1 및 부록 K와 완전히 호환되지 않아[16] 이식성에 문제가 있을 수 있다. 따라서, 이식성이 중요한 프로젝트에서는 경고를 비활성화하거나 무시하는 경우가 일반적이다.[17]

5. 1. 버퍼 오버플로우 취약점

C 표준 라이브러리의 몇몇 함수들은 버퍼 오버플로우 취약점과 버그를 유발하는 프로그래밍을 조장하는 것으로 악명이 높다.[58] 가장 비판받는 항목은 다음과 같다.

  • 문자열 조작 루틴: `strcpy()`, `strcat()` 함수는 경계 검사를 하지 않아 버퍼 오버플로우가 발생할 수 있다.[58]
  • 일반적인 문자열 루틴: 부작용으로 인해 무책임한 버퍼 사용을 유발하며, 널 종료 출력과 선형 길이 계산을 항상 보장하지는 않는다.[59]
  • `printf()` 관련 루틴: 형식 문자열이 주어진 인자와 맞지 않으면 실행 스택을 망가뜨려 포맷 스트링 공격을 유발한다.[58]
  • `gets()`, `scanf()` 계열 입출력 루틴: 입력 길이 검사가 부족하다.[58]


`gets()`를 제외하고, 이러한 취약점은 메모리 관리, 경계 검사, 입력 검사 등을 수행하는 추가 코드를 통해 해결할 수 있다. 이는 표준 라이브러리 함수를 더 안전하게 사용하는 래퍼 형태로 구현되기도 한다.

ISO C 위원회는 이러한 문제 해결을 위해 기술 보고서 TR 24731-1[60]을 발행하고 TR 24731-2[61]를 작성 중이다. TR 24731-1은 비판을 받기도 했지만,[62][63] 마이크로소프트 C 표준 라이브러리에 구현되어 오래된 함수 사용 시 경고를 발생시킨다.

5. 2. 스레딩 문제, 경쟁 상태 취약점

`strerror()` 루틴은 스레드 안전하지 않고 그 외에 경합 조건에 취약하다는 비판을 받는다.[1]

5. 3. 오류 처리

C 표준 라이브러리 함수들의 오류 처리는 일관성이 없고 때로는 혼란스럽다는 비판을 받는다. 리눅스 매뉴얼 페이지 `math_error`에 따르면 "현재(버전 2.8) glibc의 상황은 혼란스럽습니다. 대부분(전부는 아님)의 함수는 오류 시 예외를 발생시킵니다. 일부 함수는 ''errno''를 설정하기도 합니다. 몇몇 함수는 ''errno''를 설정하지만 예외를 발생시키지 않습니다. 극소수의 함수는 둘 다 하지 않습니다."[18]

6. 표준화

다른 언어들과 달리, 초기 C 언어는 입출력 동작 같은 내장 함수들을 제공하지 않았다. 시간이 지나면서 C 사용자 커뮤니티는 현재 C 표준 라이브러리라고 불리는 것을 구현하고 공유했으며, 이러한 아이디어들 중 많은 수가 결국 표준 C 언어의 정의에 포함되었다.

유닉스와 C는 모두 벨 연구소에서 1960년대 후반에서 1970년대에 만들어졌다. 1970년대 동안 C 언어는 점점 유명해졌고, 많은 대학교들과 단체들이 자신의 프로젝트를 위해 이 언어를 자신만의 형태로 만들었다. 1980년대 초, 이들 간에 호환성 문제가 발생하자, 1983년 미국 국립 표준 협회(ANSI)는 C의 표준 명세를 확립하기 위한 위원회를 구성했고, 이는 ANSI C로 불리게 되었다. 이 작업은 1989년 C89라고 불리는 표준이 만들어지면서 완료되었다.

POSIX 또는 SUS는 기본 C 표준 라이브러리에서 사용 가능한 것 외에 추가적인 루틴들을 명시하였다. POSIX 명세는 멀티스레딩, 네트워킹, 정규 표현식에 대한 헤더 파일들을 포함한다. 이러한 것들은 종종 C 표준 라이브러리 기능들과 함께 구현되기도 한다. 예를 들어, glibc는 `libc.so` 내에 `fork` 같은 함수들을 구현하였다. 종종 POSIX 명세의 기능은 라이브러리의 한 부분으로 여겨질 수 있다. 기본 C 라이브러리는 ANSI 또는 ISO C 라이브러리로 식별된다.

'''BSD libc'''는 프리BSD, 넷BSD, 오픈BSD, macOS와 같은 BSD 운영 체제에서 사용되는 C 라이브러리에서 지원하는 POSIX 표준 라이브러리의 상위 집합이다. BSD libc는 원본 표준에서 정의되지 않은 몇몇 확장들을 가지며, 1994년 릴리즈된 4.4BSD에서 처음 선보여졌다. BSD libc의 확장들 중 몇몇은 다음과 같다:


  • `sys/tree.h`는 레드-블랙 트리스플레이 트리 구현을 포함한다.[19][20]
  • `sys/queue.h`는 연결 리스트, , 테일 큐 등의 구현을 포함한다.[21][22]
  • `stdio.h`에 정의된 `fgetln()`은 파일을 한 줄씩 읽는 데 사용될 수 있다.[23][24][25]
  • `fts.h`는 파일 계층 구조를 탐색하는 함수들을 포함한다.[26][27]
  • `db.h`는 버클리 DB에 연결하는 함수들을 포함한다.[28][29]
  • `strlcat()` 및 `strlcpy()`는 `strncat()` 및 `strncpy()`의 보안 대체 함수이다.[30][31][32][33][34]
  • `err.h`는 형식이 지정된 오류 메시지를 인쇄하는 함수들을 포함한다.[35][36]
  • `vis.h`는 `vis()` 함수를 포함한다. 이 함수는 출력할 수 없는 문자를 시각적 형식으로 표시하는 데 사용된다.[37][38][39]

7. 다른 언어에서의 C 표준 라이브러리

C++(와)과 같은 몇몇 언어들은 자신의 라이브러리에 C 표준 라이브러리의 기능을 포함한다. 라이브러리는 그 언어의 구조에 맞게 채택되지만, 동작 의미는 비슷하게 유지된다. 예를 들어 C++은 C 표준 라이브러리 기능을 `std` 이름공간(예: `std::printf`)에 포함하며, 헤더 파일도 C의 것과 비슷하다(`cstdio`, `cmath`, `cstdlib` 등). D, 파이썬(C파이썬)과 같은 다른 언어들도 비슷한 접근 방식을 취한다. 예를 들어 파이썬 2에서 빌트인 파일 객체들은 "C의 `stdio` 패키지를 사용해서 구현되었다"[73]고 정의되어, 사용 가능한 연산들(open, read, write 등)은 상응하는 C 함수들과 같은 동작을 한다고 기대할 수 있다.

7. 1. C++

C++는 `std` 네임스페이스에서 C 표준 라이브러리의 기능을 제공한다. (예: `std::printf`) 헤더 파일은 C와 유사한 이름을 사용한다. (예: ``).[73]

C++에서 C 표준 라이브러리 함수는 두 가지 방식으로 제공된다.

  • C 및 이전 표준 C++와의 하위 호환성/상호 호환성을 위해, C 표준 헤더 ``를 포함한 후 전역 네임스페이스( `::` )에서 함수에 접근할 수 있다.[40]
  • `` 헤더를 포함하여 `std` 네임스페이스에서 함수를 사용할 수 있다. (예: C의 `printf`는 C++의 `std::printf`). 이는 C 헤더 `` 대신 사용된다. (예: ``는 `` 대체). C++ 헤더 이름에는 '.h' 확장자가 없다.


C++98은 C 헤더 (`*.h`)를 폐지했지만, C++23은 이를 다시 폐지하지 않았다.[44]

C++11은 C99 표준 라이브러리와 ``를 포함한다.

표준 C 라이브러리 헤더 ``는 C++에서 ``로 매핑된다. 각 식별자는 `std` 네임스페이스 내에 선언된다. C 표준 라이브러리와의 호환성을 위해 `` 형식도 사용 가능하며, `std` 네임스페이스 내 식별자는 `using` 지시어로 전역 네임스페이스로 가져온다.

C++ 고유의 사정으로 `memchr`, `strstr` 등 일부 함수는 C와 호환성이 떨어진다. 인수 포인터가 가리키는 형이 `const`로 한정되는지에 따라 반환값 형도 변경되도록 다중 정의되어 있다.

7. 2. Python

CPython은 자체적인 공통 라이브러리에 일부 C 표준 라이브러리 함수에 대한 래퍼를 포함하며, `ctypes` 패키지를 통해 C 함수 및 변수에 더 직접적인 접근을 허용한다.[45]

파이썬 2.x는 내장 파일 객체를 "C의 `stdio` 패키지를 사용하여 구현"하도록 명시하고,[46] C 표준 라이브러리 동작에 대한 언급이 빈번하게 이루어진다. 사용 가능한 연산 (open|파이썬 open영어, read|파이썬 read영어, write|파이썬 write영어 등)은 해당 C 함수 (fopen|C fopen영어, fread|C fread영어, fwrite|C fwrite영어 등)와 동일한 동작을 할 것으로 예상된다.

파이썬 3의 명세는 파이썬 2보다 C 관련 사항에 덜 의존한다.

7. 3. Rust

러스트는 `libc` 크레이트를 통해 C 표준 라이브러리 함수 및 형식 정의를 사용할 수 있게 해준다.[47]

8. 다른 언어들의 표준 라이브러리와의 비교

C 표준 라이브러리는 다른 언어들의 표준 라이브러리에 비해 작다. C 라이브러리는 수학, 문자열 조작, 형 변환, 파일과 콘솔 기반 입출력 함수들의 기본 집합을 제공한다. C++ 표준 템플릿 라이브러리처럼 컨테이너 타입의 표준 집합을 포함하지 않으며, 그래픽 사용자 인터페이스(GUI) 툴킷, 네트워킹 도구, 자바 및 .NET 프레임워크가 표준으로 제공하는 풍부한 기타 기능도 포함하지 않는다. 이러한 작은 표준 라이브러리의 장점은 ISO C 환경을 다른 언어들보다 더 쉽게 제공한다는 것이며, 결과적으로 C를 새로운 플랫폼에 이식하는 것이 상대적으로 쉽다.

참조

[1] 간행물 ISO/IEC 9899:2018(E): Programming Languages - C §7 ISO/IEC 2018
[2] 웹사이트 The GNU C Library – Introduction http://ftp.gnu.org/o[...] 2013-12-05
[3] 웹사이트 Difference between C standard library and C POSIX library https://stackoverflo[...] 2015-03-04
[4] 웹사이트 C Standards http://www.keil.com/[...] Keil 2011-11-24
[5] 웹사이트 Re: Does Newlib support mmu-less CPUs? https://web.archive.[...] Cygwin.com 2011-10-28
[6] 웹사이트 musl libc http://www.etalabs.n[...] Etalabs.net 2011-10-28
[7] 웹사이트 Other built-in functions provided by GCC https://gcc.gnu.org/[...] GCC Manual
[8] 웹사이트 Compiling with cc http://www.freebsd.o[...] 2013-03-02
[9] 웹사이트 c - What functions is the libm intended for? https://stackoverflo[...] 2021-02-24
[10] 웹사이트 c99 - compile standard C programs https://pubs.opengro[...] The Open Group 2021-02-24
[11] 웹사이트 musl FAQ https://www.musl-lib[...] 2021-02-24
[12] 웹사이트 ISO/IEC TR 24731-1: Extensions to the C Library, Part I: Bounds-checking interfaces http://www.open-std.[...] open-std.org 2014-03-13
[13] 웹사이트 ISO/IEC WDTR 24731-2: Extensions to the C Library, Part II: Dynamic Allocation Functions http://www.open-std.[...] open-std.org 2014-03-13
[14] Stack overflow Do you use the TR 24731 'safe' functions in your C code? https://stackoverflo[...]
[15] 웹사이트 Austin Group Review of ISO/IEC WDTR 24731 http://www.open-std.[...] 2011-10-28
[16] 웹사이트 Field Experience With Annex K—''Bounds Checking Interfaces'' http://www.open-std.[...] 2024-10-09
[17] 웹사이트 Security Features in the CRT—Eliminating deprecation warnings https://learn.micros[...] 2024-10-09
[18] 웹사이트 math_error - detecting errors from mathematical functions http://man7.org/linu[...] 2014-03-13
[19] 웹사이트 tree http://man.freebsd.o[...] 2013-08-25
[20] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/sys/sys/tree.h http://bxr.su/o/sys/[...]
[21] 웹사이트 queue http://man.freebsd.o[...] 2013-08-25
[22] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/sys/sys/queue.h http://bxr.su/o/sys/[...]
[23] 웹사이트 fgetln http://man.freebsd.o[...] 2013-08-25
[24] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/lib/libc/stdio/fgetln.c http://bxr.su/o/lib/[...]
[25] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/include/stdio.h http://bxr.su/o/incl[...]
[26] 웹사이트 fts http://man.freebsd.o[...] 2013-08-25
[27] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/include/fts.h http://bxr.su/o/incl[...]
[28] 웹사이트 db http://man.freebsd.o[...] 2013-08-25
[29] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/include/db.h http://bxr.su/o/incl[...]
[30] 간행물 strlcpy and strlcat - consistent, safe, string copy and concatenation http://www.usenix.or[...] 1999-06-06
[31] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strlcat.c http://bxr.su/o/lib/[...]
[32] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strlcpy.c http://bxr.su/o/lib/[...]
[33] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strncat.c http://bxr.su/o/lib/[...]
[34] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strncpy.c http://bxr.su/o/lib/[...]
[35] 웹사이트 err http://man.freebsd.o[...] 2013-08-25
[36] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/include/err.h http://bxr.su/o/incl[...]
[37] 웹사이트 vis(3) http://www.freebsd.o[...] 2013-09-14
[38] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/lib/libc/gen/vis.c http://bxr.su/o/lib/[...]
[39] 웹사이트 Super User's BSD Cross Reference: /OpenBSD/include/vis.h http://bxr.su/o/incl[...]
[40] 웹사이트 C++ Standard Library Headers—C compatibility headers https://en.cpprefere[...] 2024-10-09
[41] 웹사이트 Using "using": How to use the std namespace https://websites.umi[...] EECS Department, University of Michigan 2015-02-15
[42] 웹사이트 C++ Standard Library headers—Unsupported C headers https://en.cpprefere[...] 2024-10-09
[43] 웹사이트 C++ Standard Library headers—Meaningless C headers https://en.cpprefere[...] 2024-10-09
[44] 웹사이트 C++ Standard Library headers—C compatibility headers https://en.cpprefere[...] 2024-10-09
[45] 웹사이트 ctypes—A foreign function library for Python https://docs.python.[...] docs.python.com 2024-10-09
[46] 웹사이트 The Python Standard Library, §5.9: File Objects https://docs.python.[...] 2024-10-09
[47] 웹사이트 Crate ''libc'' https://docs.rs/libc[...] 2024-10-09
[48] 간행물 ISO/IEC 9899/AMD1:1995
[49] 간행물 ISO/IEC 9899:1999 TC3 | WG14/N1256, Committee Draft | Septermber 7, 2007 | 7.5 Errors <errno.h> http://www.open-std.[...]
[50] 간행물 ISO/IEC 9899:201x | WG14/N1548, Committee Draft | December 2, 2010 | 7.5 Errors <errno.h> http://www.open-std.[...]
[51] 서적 N2596 working draft — December 11, 2020 ISO/IEC 9899:202x (E) http://www.open-std.[...] ISO/IEC JTC1/SC22/WG14
[52] 간행물 ISO/IEC 9899:1999(E): Programming Languages - C §7.19.1 para 1 International Organization for Standardization|International Electrotechnical Commission|IEC 1999
[53] 웹인용 The GNU C Library Introduction http://ftp.gnu.org/o[...] 2016-02-11
[54] 웹인용 Difference between C standard library and C POSIX library http://stackoverflow[...] 2016-02-11
[55] 웹인용 C Standards http://www.keil.com/[...] Keil 2016-02-11
[56] 문서 Other built-in functions provided by GCC http://gcc.gnu.org/o[...] GCC Manual
[57] 웹인용 Compiling with cc http://www.freebsd.o[...] 2016-02-11
[58] 문서 Morris worm that takes advantage of the well-known vulnerability in gets() have been created as early as in 1988.
[59] 문서 in C standard library, string length calculation and looking for a string's end have Linear time and are inefficient when used on the same or related strings repeatedly
[60] 웹인용 ISO/IEC TR 24731-1: Extensions to the C Library, Part I: Bounds-checking interfaces http://www.open-std.[...] open-std.org 2016-02-11
[61] 웹인용 ISO/IEC WDTR 24731-2: Extensions to the C Library, Part II: Dynamic Allocation Functions http://www.open-std.[...] open-std.org 2016-02-11
[62] 문서 Do you use the TR 24731 'safe' functions in your C code?] - Stack overflow http://stackoverflow[...]
[63] 웹인용 Austin Group Review of ISO/IEC WDTR 24731 http://www.open-std.[...] 2016-02-11
[64] 웹인용 math_error - detecting errors from mathematical functions http://man7.org/linu[...] man7.org 2016-02-11
[65] 웹인용 tree http://man.freebsd.o[...] Man.freebsd.org 2016-02-11
[66] 웹인용 queue http://man.freebsd.o[...] Man.freebsd.org 2016-02-11
[67] 웹인용 fgetln http://man.freebsd.o[...] Man.freebsd.org 2016-02-11
[68] 웹인용 fts http://man.freebsd.o[...] Man.freebsd.org 2016-02-11
[69] 웹인용 db http://man.freebsd.o[...] Man.freebsd.org 2016-02-11
[70] 간행물 strlcpy and strlcat - consistent, safe, string copy and concatenation http://www.usenix.or[...] Miller, Todd C. and Theo de Raadt.
[71] 웹인용 err http://man.freebsd.o[...] Man.freebsd.org 2012-03-29
[72] 웹인용 vis(3) http://www.freebsd.o[...] Man.FreeBSD.org 2016-02-11
[73] 웹인용 The Python Standard Library: 6.9. File Objects https://docs.python.[...] Docs.python.org 2016-02-11



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com